*******************************************************
* robustness_checks.do
* Replication file for robustness analyses
* Paper: "Powers and Practices in Labor Standards Enforcement" in Regulation & Governance
* Author: Daniel J. Galvin, et al.
* Date created: February 4, 2026
*
* Description:
* This do-file reproduces robustness checks reported in the paper.
* All models estimate survey-weighted logistic regressions of
* minimum wage violations under alternative sample restrictions.
*
* Notes:
* - Survey design matches the main analysis.
* - Each specification includes an interaction between
*   enforcement powers and enforcement practices.
* - Marginal effects are computed after each model.
* - Figures are not generated in this file.
*******************************************************

version 13.1
clear matrix
set more off

*******************************************************
* 1. Survey design specification
*******************************************************

svyset statefip [pw=orgwgt12], strat(region) vce(linearized) singleunit(centered)

*******************************************************
* 2. Robustness checks
*******************************************************

*******************************************************
* Robustness 1: Hourly workers only
*******************************************************

svy, subpop(if exemptions2018==0 & over10hours==1 & wageotc_noadj!=. & dropobs==0 & paidhre==1): ///
    logit mwviolstate25 ///
        i.year ///
        i.age_cat ///
        i.female ///
        i.wbhaom ///
        i.citizen ///
        i.educ ///
        i.mind16 ///
        i.unmem ///
        c.investigatorspercap ///
        uemonth ///
        housingpriceindex ///
        kaitz_c ///
        c.fiftyten ///
        c.political_index ///
        privsector ///
        c.powers##c.practices

margins, at(practices=(0 .25 .5 .75 1) powers=(1))
* marginsplot

*******************************************************
* Robustness 2: Non-hourly workers
*******************************************************

svy, subpop(if exemptions2018==0 & over10hours==1 & wageotc_noadj!=. & dropobs==0 & paidhre==0): ///
    logit mwviolstate25 ///
        i.year ///
        i.age_cat ///
        i.female ///
        i.wbhaom ///
        i.citizen ///
        i.educ ///
        i.mind16 ///
        i.unmem ///
        c.investigatorspercap ///
        uemonth ///
        housingpriceindex ///
        kaitz_c ///
        c.fiftyten ///
        c.political_index ///
        privsector ///
        c.powers##c.practices

margins, at(practices=(0 .25 .5 .75 1) powers=(1))
* marginsplot

*******************************************************
* Robustness 3: No tipped pay, commissions, or overtime
*******************************************************

svy, subpop(if exemptions2018==0 & over10hours==1 & wageotc_noadj!=. & dropobs==0 & otcrec==0): ///
    logit mwviolstate25 ///
        i.year ///
        i.age_cat ///
        i.female ///
        i.wbhaom ///
        i.citizen ///
        i.educ ///
        i.mind16 ///
        i.unmem ///
        c.investigatorspercap ///
        uemonth ///
        housingpriceindex ///
        kaitz_c ///
        c.fiftyten ///
        c.political_index ///
        privsector ///
        c.powers##c.practices

margins, at(practices=(0 .25 .5 .75 1) powers=(1))
* marginsplot

*******************************************************
* Robustness 4: Tipped workers, under 41 hours per week
*******************************************************

svy, subpop(if exemptions2018==0 & over10hours==1 & wageotc_noadj!=. & dropobs==0 & otcrec==1 & over40hours==0): ///
    logit mwviolstate25 ///
        i.year ///
        i.age_cat ///
        i.female ///
        i.wbhaom ///
        i.citizen ///
        i.educ ///
        i.mind16 ///
        i.unmem ///
        c.investigatorspercap ///
        uemonth ///
        housingpriceindex ///
        kaitz_c ///
        c.fiftyten ///
        c.political_index ///
        privsector ///
        c.powers##c.practices

margins, at(practices=(0 .25 .5 .75 1) powers=(1))
* marginsplot

*******************************************************
* End of robustness_checks.do
*******************************************************
